package cn.itcast.nems.journal.dto;

import java.io.Serializable;
import java.time.LocalDate;
import java.util.List;

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

/**
 * 
 * 结课凭单创建/编辑参数
 *
 * @author 刘曙
 *
 * @version 
 *
 * @since 2024年1月4日
 */
@Data
public class JournalFinalEditDTO implements Serializable {
    private static final long serialVersionUID = 2027026842439783373L;

    /**
     * 结课凭单ID
     */
    private String id  ;

    /**
     * 学科ID;结课目标班级所属
     */
    @NotNull(message = "学科ID不能为空！")
    private String subjectId;

    /**
     * 学科名称;结课目标班级所属
     */
    private String subjectName;

    /**
     * 校区ID;结课目标班级所属
     */
    @NotNull(message = "校区ID不能为空！")
    private String campusId;

    /**
     * 校区名称;结课目标班级所属
     */
    private String campusName;

    /**
     * 授课模式ID;结课目标班级所属
     */
    @NotNull(message = "授课模式ID不能为空！")
    private String modelId;

    /**
     * 授课模式名称;结课目标班级所属
     */
    private String modelName;

    /**
     * 当前在班学生人数
     */
    private Integer studentQuantity;

    /**
     * 结课目标班级ID
     */
    @NotNull(message = "班级ID不能为空！")
    @Min(value = 1, message = "班级ID必须大于零！")
    private Integer clazzId;
    /**
     * 结课目标班级名称
     */
    private String clazzName;

    /**
     * 班级开班日期
     */
    @NotNull(message = "开班时间不能为空！")
    private LocalDate startDate;

    /**
     * 班级预计结课日期
     */
    @NotNull(message = "预计结课时间不能为空！")
    private LocalDate planFinalDate;

    /**
     * 实际结课日期
     */
    @NotNull(message = "班级实际结课日期不能为空！")
    private LocalDate actualFinalDate;

    /**
     * 特殊申请;枚举值：非特殊｜0、特殊｜1
     */
    private Boolean specialFlag;

    /**
     * 备注
     */
    private String remark;
    /**
     * 审批状态 枚举值：草稿｜DRAFT、待审批｜PENDING、审批中｜APPROVING、审批未通过｜REJECTED、已完成｜FINISHED
     */
    private String state ;
    /**
     * 凭单行列表
     */
    private List<JournalFinalLineDTO> lineList ;
}
